package cn.fl.ref.crbaseinfo.service;

import java.util.List;
import java.util.Map;

import cmm.mid.core.framework.dto.DataResultDTO;
import cmm.mid.core.framework.page.Pager;
import cn.cmm.base.framework.exception.BaseException;
import cn.fl.ref.crbaseinfo.vo.CrAstRltvInfoVO;
import cn.fl.ref.crbaseinfo.vo.CrBaseInfoVO;
import cn.fl.ref.crbaseinfo.vo.CrUdtJrnlInfoVO;
import fl.flow.facade.flow.dto.FlowStartParamsDTO;
import fl.ref.crbaseinfo.condition.CrBaseInfoQueryCondition;

/**
 * @Description: 授信基础信息
 * @Description:业务层方法名称前缀：新增：add* 删除：remove* 修改：modify* 查询对象：select* get* 批量：batch* 查询集合：search* 服务层接口, 继承IBaseBiz
 */
public interface ICrBaseInfoService {
      
	/**
	 * 获取唯一对象
	 * @param id 主键
	 * @return 对象VO
	 */
	public CrBaseInfoVO selectById(Long id) throws BaseException;
	
	/**
	 * 新增
	 * @param entity
	 * @param crBaseInfoHisList 
	 * @return
	 */
    public Long add(CrBaseInfoVO entity, List<CrBaseInfoVO> crBaseInfoHisList) throws BaseException;

    /**
     * 删除
     * @param id
     * @return
     */
    public boolean removeById(Long id) throws BaseException;

    /**
     * 修改
     * @param entity
     * @return
     */
    public boolean modify(CrBaseInfoVO entity) throws BaseException;

    /**
     * 分页查询所有
     * @param page
     * @return
     */
    public Pager searchListPage(Pager page) throws BaseException;

    /**
     * 根据编号查询该条授信所有所有信息
     * @param crId
     * @return
     * @throws BaseException
     */
    public CrBaseInfoVO selectByIdCondition(Long id) throws BaseException;

    /**
     * 根据id删除资产信息
     * @param id
     * @return
     * @throws BaseException
     */
    public boolean removeCrAstRltvById(Long id) throws BaseException;

    /**
     * 修改授信信息，包含修改记录
     * @param crBaseInfoEntity
     * @param crBaseInfoHisList 
     * @param crUdtJrnlInfoEntity
     * @return
     * @throws BaseException
     */
    public boolean modify(CrBaseInfoVO crBaseInfoEntity, List<CrBaseInfoVO> crBaseInfoHisList, CrUdtJrnlInfoVO crUdtJrnlInfoEntity) throws BaseException;

    /**
     * 根据授信编号删除信息
     * @param crId
     * @return 
     * @throws BaseException
     */
	public boolean removeByCrId(String crId) throws BaseException;

	/**
     * 根据查询条件查询授信信息
     * @param crId
     * @return 
     * @throws BaseException
     */
	public List<CrBaseInfoVO> selectByCondition(CrBaseInfoQueryCondition qc) throws BaseException;

	/**
	 * 查询关联历史授信记录
	 * @param qc
	 * @return
	 * @throws BaseException
	 */
	public List<CrBaseInfoVO> selectHisCrList(CrBaseInfoQueryCondition qc) throws BaseException;
	
	/**
	 * 查询可以关联授信记录
	 * @param qc
	 * @return
	 * @throws BaseException
	 */
	public List<CrBaseInfoVO> selectHisCrListValid(CrBaseInfoQueryCondition qc) throws BaseException;
	
	public CrBaseInfoVO selectByCrId(String crId) throws BaseException;
	
	/**
	 * 根据用户ID和业务主键等参数启动流程
	 * @param flowStartParamsDTO 启动参数
	 */
	public DataResultDTO addFlowStart(FlowStartParamsDTO flowStartParamsDTO)throws BaseException;

	/**
	 * 根据授信编号查询的资产信息
	 * @param rvlCr
	 * @param crId
	 * @return
	 * @throws BaseException
	 */
    public List<CrAstRltvInfoVO> selectAstInfoByCrId(int rvlCr, String crId) throws BaseException;

    /**
	 * 查询授信合同号重复
	 * @param crCtrNo
	 * @return
	 * @throws BaseException
	 */
	public boolean selectCnkiCrCtrNo(String crCtrNo) throws BaseException;

	/**
	 * 查询授信名称重复
	 * @param crNm
	 * @return
	 * @throws BaseException
	 */
	public boolean selectCnkiCrNm(String crNm) throws BaseException;

	/**
	 * 授信到期修改授信状态为停止
	 * @param crSt
	 * @return
	 * @throws BaseException
	 */
	public boolean batchUpdateCrStSTOP(int crSt) throws BaseException;

	/**
	    * 获取机构限额信息
	 * @return
	 */
	public List<Map<String, Object>> searchFundRasInsLimList(Long insId) throws BaseException ;
}
